//翻转链表
import linkListDefine.ListNode;
public class reverseLinkList {
    public ListNode reverse(ListNode start){
        ListNode temp;//临时结点
        ListNode cur = start;//当前结点，从第一个结点开始
        ListNode pre = null;//前一个结点
        while (cur!=null){
            temp = cur;
            cur = cur.next;
            temp.next = pre;
            pre = temp;
        }
        return pre;
    }

    public ListNode reverse(ListNode pre,ListNode cur){//递归方式求解
        if(cur==null){//这个递归出口为啥是pre
            return pre;//是返回新列表的头结点，所以是pre
        }
        ListNode temp = cur.next;
        cur.next = pre;
        return reverse(cur,temp);
    }

    public static void main(String[] args) {
        var main = new reverseLinkList();
        int[] list = new int[]{1,2,3,4,5,6,7};
        //建立链表，从后往前进行建立链表
        ListNode a = new ListNode(list[list.length-1]);
        for(int i=list.length-2;i>=0;i--){
            ListNode b = new ListNode(list[i],a);
            a = b;
        }
//        ListNode res = main.reverse(a);
        ListNode res = main.reverse(null,a);
        while (res!=null){
            System.out.println(res.data);
            res = res.next;
        }
    }
}
